package com.mexcad.reports;

import java.awt.Color;
import java.io.IOException;
import java.sql.Connection;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperManager;
import net.sf.jasperreports.engine.JasperPrint;

import org.hibernate.Session;

import com.lowagie.text.Chunk;
import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Element;
import com.lowagie.text.Font;
import com.lowagie.text.FontFactory;
import com.lowagie.text.PageSize;
import com.lowagie.text.Paragraph;
import com.lowagie.text.pdf.PdfWriter;
import com.mexcad.db.connectors.CreditoConnector;
import com.mexcad.db.connectors.ReportConnectors;
import com.mexcad.db.delegate.DelegateConnectors;
import com.mexcad.db.dto.CatPeriodoSolicitado;
import com.mexcad.db.dto.Cliente;
import com.mexcad.db.dto.Credito;
import com.mexcad.db.dto.Renta;
import com.mexcad.db.utils.HibernateUtil;
import com.mexcad.reports.utils.DataType;
import com.mexcad.reports.utils.DocumentsAdds;
import com.mexcad.reports.utils.PDFDocumentException;
import com.mexcad.reports.utils.PDFTable;
import com.mexcad.utils.Constantes;
import com.mexcad.utils.Formatter;
import java.sql.Timestamp;

public class EstadoCuentaReport extends HttpServlet {
	private static final long serialVersionUID = 1L;
	private PdfWriter writer; 
	private String titulo="Colocaci�n Cartera";
	
		protected void doPost(HttpServletRequest req, HttpServletResponse res)
				throws ServletException, IOException {

			try {
				Document doc =  new Document(PageSize._11X17, 25, 25, 25, 50);
				writer=   PdfWriter.getInstance(doc, res.getOutputStream());
				writer.setViewerPreferences(PdfWriter.PageModeUseThumbs);
					
				writer.setLinearPageMode();

				writer.setPageEvent( new DocumentsAdds.MyPageEvents());
				
				DocumentsAdds.addMetaData(doc, "Documento Test");
				doc.open();
				
				String idCredito = req.getParameter("idCredito");
				
				
				
				PDFTable pdfTable=null;
				
				if(idCredito !=null){
					Credito cred = CreditoConnector.getCreditoPorId(new Integer(idCredito).intValue());
					if(cred!=null){
						double capitalPeriodo = cred.getMontoCredito()/cred.getPlazoSolicitado();
						double interesPeriodo = cred.getIntereses()/cred.getPlazoSolicitado();
						double impuestosPeriodo = cred.getImpuestos()/cred.getPlazoSolicitado();
						double cuotaPeriodo = cred.getCuota()/cred.getPlazoSolicitado();
						
						DocumentsAdds.addHeaderEdoCuenta(doc, cred);
						String []header =new String[]{"Pago", "Fecha exigible","Descripción", "Capital", "Intereses",
								  					  "Impuestos","Cuota","Abono","Saldo"};
						float []tamCols =new float[]{1,1.5f,4,2,2,2,2,2,2};
						 List<DataType []> listadoDatos = new ArrayList<DataType []>();   
						 List<Renta> listadoRentas =CreditoConnector.getAllRentasByCredito(cred.getCkCredito().getIdCredito());
						 for(int i=0;i<listadoRentas.size();++i){
							 Renta renta = listadoRentas.get(i);
							 
							 DataType []datos = new DataType[header.length];
							 datos[0]= new DataType();
							 datos[0].setAlignMode(Element.ALIGN_CENTER);
							 datos[0].setData(renta.getNumRenta());
							 datos[0].setDataType(DataType.STRING_TYPE);

							 datos[1]= new DataType();
							 datos[1].setAlignMode(Element.ALIGN_CENTER);
							 datos[1].setData(Formatter.getStringFromDate(renta.getFechaExigible()));
							 datos[1].setDataType(DataType.STRING_TYPE);

							 datos[2]= new DataType();
							 datos[2].setAlignMode(Element.ALIGN_CENTER);
							 datos[2].setData("Renta "+ renta.getNumRenta()+"/" +cred.getPlazoSolicitado());
							 datos[2].setDataType(DataType.STRING_TYPE);

							 datos[3]= new DataType();
							 datos[3].setAlignMode(Element.ALIGN_RIGHT);
							 datos[3].setData("$ "+Constantes.formatter.format(capitalPeriodo));
							 datos[3].setDataType(DataType.STRING_TYPE);

							 datos[4]= new DataType();
							 datos[4].setAlignMode(Element.ALIGN_RIGHT);
							 datos[4].setData("$ "+Constantes.formatter.format(interesPeriodo));
							 datos[4].setDataType(DataType.STRING_TYPE);

							 datos[5]= new DataType();
							 datos[5].setAlignMode(Element.ALIGN_RIGHT);
							 datos[5].setData("$ "+Constantes.formatter.format(impuestosPeriodo));
							 datos[5].setDataType(DataType.STRING_TYPE);

							 datos[6]= new DataType();
							 datos[6].setAlignMode(Element.ALIGN_RIGHT);
							 datos[6].setData("$ "+Constantes.formatter.format(cuotaPeriodo));
							 datos[6].setDataType(DataType.STRING_TYPE);

							 datos[7]= new DataType();
							 datos[7].setAlignMode(Element.ALIGN_RIGHT);
							 datos[7].setData("$ "+Constantes.formatter.format(renta.getAbono()));
							 datos[7].setDataType(DataType.STRING_TYPE);

							 datos[8]= new DataType();
							 datos[8].setAlignMode(Element.ALIGN_RIGHT);
							 datos[8].setData("$ "+Constantes.formatter.format(renta.getSaldo()));
							 datos[8].setDataType(DataType.STRING_TYPE);
							 
							 listadoDatos.add(datos);
						 }
						 
						
						 
						 pdfTable = new PDFTable(tamCols,header,listadoDatos);
						 doc.add(pdfTable.getTable());
						
					}else{
						Paragraph p = new Paragraph("Error al generar el documento",FontFactory.getFont(FontFactory.COURIER, 28, Font.BOLD, new Color(0, 0, 0)));
						doc.add(p);
					}
				}else{
					Paragraph p = new Paragraph("Error al generar el documento",FontFactory.getFont(FontFactory.COURIER, 28, Font.BOLD, new Color(0, 0, 0)));
					doc.add(p);
				}
					
						
				
				doc.add (Chunk.NEWLINE);
				doc.add (Chunk.NEWLINE);
				
				doc.close();
				
				
				
			} catch (DocumentException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (PDFDocumentException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		

		}

		protected void doGet(HttpServletRequest arg0, HttpServletResponse arg1)
				throws ServletException, IOException {
			doPost(arg0, arg1);
		}
}




